package com.hddf.project.util.http;

import java.io.IOException;
import java.util.List;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

public class JsonUtils {

	private static final ObjectMapper objectMapper = new ObjectMapper();

	private JsonUtils() {
	}

	public static ObjectMapper getInstance() {
		return objectMapper;
	}

	/**
	 * 使用Jackson 数据绑定 将对象转换为 json字符串
	 * 
	 * 还可以 直接使用 JsonUtils.getInstance().writeValueAsString(Object obj)方式
	 * 
	 * @param obj
	 * @return
	 */
	public static String toJsonString(Object obj) {
		try {
			return objectMapper.writeValueAsString(obj);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * json字符串转化为 JavaBean
	 * 
	 * 还可以直接JsonUtils.getInstance().readValue(String content,Class
	 * valueType)用这种方式
	 * 
	 * @param <T>
	 * @param content
	 *            JSON String
	 * @param valueType
	 *            Class
	 * @return
	 */
	public static <T> T toJavaBean(String content, Class<T> valueType) {
		try {
			return objectMapper.readValue(content, valueType);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * json字符串转化为list<T>
	 * 
	 * 还可以 直接使用 JsonUtils.getInstance().readValue(String content, new
	 * TypeReference<List<T>>(){})方式
	 * 
	 * @param <T>
	 * @param content
	 *            JSON String
	 * @param valueType
	 *            new TypeReference<List<T>>(){}
	 * @return
	 * @throws IOException
	 */
	public static <T> List<T> toJavaBeanList(String content, TypeReference<List<T>> typeReference) throws IOException {
		try {
			return objectMapper.readValue(content, typeReference);
		} catch (JsonParseException e) {
			e.printStackTrace();
			throw new RuntimeException("json字符串转化为 list失败");
		} catch (JsonMappingException e) {
			e.printStackTrace();
			throw new JsonMappingException("json字符串转化为 list失败");
		} catch (IOException e) {
			e.printStackTrace();
			throw new IOException("json字符串转化为 list失败");
		}
	}

}